<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>启动时间测试详解</title>
</head>
<body>
    <div style="margin-left: 40px;">
        <h1>启动时间测试</h1>
        <h2 style="margin-left:20px">APP启动方式</h2>
        <span style="margin-left:20px">APP中启动方式分为两种：冷启动和热启动</span>
        <ul style="margin-left:20px;">
            <li><span>冷启动：当启动应用时，后台没有该应用的进程，这时系统会重新创建一个新的进程分配给该应用，这个启动方式就是冷启动。</span></li>
            <li><span>热启动：当启动应用时，后台已有该应用的进程（例：按back键/home键，应用虽然会退出，但是该应用的进程是依然会保留在后台，可进入任务列表查看），所以在已有进程的情况下，这种启动会从已有的进程中来启动应用，这个方式叫热启动</span></li>
        </ul>
        <h2 style="margin-left:20px">APP启动流程</h2>
        <span style="margin-left:20px">冷启动：冷启动后系统会重新创建一个新的进程分配给它，所以先创建和初始化Application类，再创建和初始化MainActivity类（包括一系列的测量、布局、绘制），最后经过渲染显示在app界面。</span><br>
        <span style="margin-left:20px">热启动：热启动因为会从已有的进程中来启动，所以热启动就不会走Application这步了，而是直接走MainActivity（包括一系列的测量、布局、绘制），所以热启动的过程只需要创建和初始化一个MainActivity就行了，而不必创建和初始化Application，因为一个应用从新进程的创建到进程的销毁，Application只会初始化一次。</span>
        <h2 style="margin-left:20px">启动时间</h2>
        <span style="margin-left:20px">冷启动时间：当用户点击目标app图标的 timepoint到显示界面第一帧的时间段（当用户点击你的app那一刻到系统调用Activity.onCreate()之间的时间段）在这个时间段内，WindowManager会先加载app主题样式中的windowBackground做为app的预览元素，然后再真正去加载activity的layout布局。</span><br>
        <span style="margin-left:20px">热启动时间：用户把目标app切换至后台后，点击app图标的timepoint到显示界面第一帧的时间段</span>
        <h2 style="margin-left:20px">使用命令获得启动时间</h2>
        <span style="margin-left:20px">使用命令获得启动时间:$adb shell am start -W -n packagename/packageName.MainActivity</span>
        <h2 style="margin-left:20px">启动时间数据分析</h2>
        <span style="margin-left:20px">执行成功后将返回三个测量到的时间：</span>
        <ul style="margin-left:20px;">
            <li><span>ThisTime:一般和TotalTime时间一样，除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity，这样将比TotalTime小。</span></li>
            <li><span>TotalTime:应用的启动时间，包括创建进程+Application初始化+Activity初始化到界面显示。</span></li>
            <li><span>WaitTime:一般比TotalTime大点，包括系统影响的耗时</span></li>
        </ul>
    </div>
    <div>
        <br>
        <br>
        <br>
        <br>
        <br>
    </div>
</body>
</html>